package com.springboot.study.entity;

// lombok 的注解导入，这里未使用，可用于自动生成构造器、getter/setter等
// import lombok.AllArgsConstructor;
// import lombok.Data;
// import lombok.NoArgsConstructor;

import org.springframework.beans.factory.annotation.Value;  // 这里没有使用 @Value 注解，可删除此导入
import org.springframework.boot.context.properties.ConfigurationProperties;  // 用于绑定配置文件中的属性
import org.springframework.stereotype.Component;  // 声明 Spring Bean 的注解

/**
 * Person 类用于绑定 application.yml 或 application.properties 中以 "person" 开头的配置属性
 * 通过 @Component 使其成为 Spring 管理的 Bean
 * 通过 @ConfigurationProperties(prefix = "person") 绑定配置文件中 person.* 的属性到本类字段
 *
 * 说明：
 *      @Component 表示此类被 Spring 扫描为 Bean，自动注册到容器中。
 *      @ConfigurationProperties(prefix = "person") 负责将配置文件中以 person 开头的属性映射到该类的字段。
 *      建议在启动类加上 @EnableConfigurationProperties(Person.class)，或者使用 @Component 注解即可自动启用。
 *      这里没用 @Value，也不用在字段上写注解，全部通过配置文件绑定。
 *      lombok 的注解在此代码中未使用，可以删除对应导入。
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    // 姓名属性，对应配置文件中 person.name
    private String name;

    // 年龄属性，对应配置文件中 person.age
    private Integer age;

    // 无参构造器，Spring 反射实例化 Bean 需要
    public Person() {
    }
    // 全参构造器，方便手动实例化使用
    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    // 获取姓名
    public String getName() {
        return name;
    }

    // 设置姓名
    public void setName(String name) {
        this.name = name;
    }

    // 获取年龄
    public Integer getAge() {
        return age;
    }

    // 设置年龄
    public void setAge(Integer age) {
        this.age = age;
    }

    // 重写 toString 方法，方便打印 Person 对象信息
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
